//package com.jxj.study.util;
//
//import javax.imageio.ImageIO;
//import javax.swing.*;
//import java.awt.*;
//import java.awt.event.*;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.io.IOException;
//
///**
// * 选择图片截图
// */
//public class ImageCropper extends JFrame {
//    private BufferedImage originalImage;
//    private BufferedImage displayImage;
//    private final JLabel imageLabel;
//    private final Rectangle selectionRect = new Rectangle(100, 100, 200, 150);
//    private Point dragStart;
//    private boolean isDragging = false;
//    private boolean isResizing = false;
//    private final int RESIZE_HANDLE_SIZE = 10;
//
//    public ImageCropper() {
//        setTitle("Java图片截取工具");
//        setSize(800, 600);
//        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//        setLayout(new BorderLayout());
//
//        // 工具栏
//        JPanel toolbar = new JPanel();
//        JButton openButton = new JButton("打开图片");
//        JButton cropButton = new JButton("截取选中区域");
//        JButton saveButton = new JButton("保存截图");
//
//        toolbar.add(openButton);
//        toolbar.add(cropButton);
//        toolbar.add(saveButton);
//        add(toolbar, BorderLayout.NORTH);
//
//        // 图片显示区域
//        imageLabel = new JLabel() {
//            @Override
//            protected void paintComponent(Graphics g) {
//                super.paintComponent(g);
//                if (displayImage != null) {
//                    g.drawImage(displayImage, 0, 0, this);
//                }
//
//                // 绘制选择框
//                if (selectionRect != null) {
//                    Graphics2D g2d = (Graphics2D) g.create();
//                    g2d.setColor(Color.RED);
//                    g2d.setStroke(new BasicStroke(2, BasicStroke.CAP_BUTT,
//                            BasicStroke.JOIN_BEVEL, 0, new float[]{5}, 0)); // 虚线
//                    g2d.drawRect(selectionRect.x, selectionRect.y,
//                            selectionRect.width, selectionRect.height);
//
//                    // 绘制调整大小的手柄
//                    g2d.setColor(Color.BLUE);
//                    g2d.fillRect(selectionRect.x + selectionRect.width - RESIZE_HANDLE_SIZE/2,
//                            selectionRect.y + selectionRect.height - RESIZE_HANDLE_SIZE/2,
//                            RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE);
//                    g2d.dispose();
//                }
//            }
//        };
//
//        imageLabel.addMouseListener(new MouseAdapter() {
//            @Override
//            public void mousePressed(MouseEvent e) {
//                if (displayImage == null) return;
//
//                Point mousePoint = e.getPoint();
//                Point resizeHandle = new Point(
//                        selectionRect.x + selectionRect.width,
//                        selectionRect.y + selectionRect.height);
//
//                // 检查是否点击了调整大小的手柄
//                if (mousePoint.distance(resizeHandle) < RESIZE_HANDLE_SIZE) {
//                    isResizing = true;
//                } else if (selectionRect.contains(mousePoint)) {
//                    isDragging = true;
//                    dragStart = mousePoint;
//                }
//            }
//
//            @Override
//            public void mouseReleased(MouseEvent e) {
//                isDragging = false;
//                isResizing = false;
//            }
//        });
//
//        imageLabel.addMouseMotionListener(new MouseAdapter() {
//            @Override
//            public void mouseDragged(MouseEvent e) {
//                if (displayImage == null) return;
//
//                Point currentPoint = e.getPoint();
//                if (isDragging) {
//                    // 移动选择框
//                    int dx = currentPoint.x - dragStart.x;
//                    int dy = currentPoint.y - dragStart.y;
//
//                    selectionRect.x += dx;
//                    selectionRect.y += dy;
//
//                    // 限制在图片范围内
//                    selectionRect.x = Math.max(0, Math.min(selectionRect.x,
//                            imageLabel.getWidth() - selectionRect.width));
//                    selectionRect.y = Math.max(0, Math.min(selectionRect.y,
//                            imageLabel.getHeight() - selectionRect.height));
//
//                    dragStart = currentPoint;
//                } else if (isResizing) {
//                    // 调整选择框大小
//                    int newWidth = currentPoint.x - selectionRect.x;
//                    int newHeight = currentPoint.y - selectionRect.y;
//
//                    selectionRect.width = Math.max(50, newWidth);
//                    selectionRect.height = Math.max(50, newHeight);
//
//                    // 限制在图片范围内
//                    selectionRect.width = Math.min(selectionRect.width,
//                            imageLabel.getWidth() - selectionRect.x);
//                    selectionRect.height = Math.min(selectionRect.height,
//                            imageLabel.getHeight() - selectionRect.y);
//                }
//
//                imageLabel.repaint();
//            }
//        });
//
//        add(new JScrollPane(imageLabel), BorderLayout.CENTER);
//
//        // 按钮事件
//        openButton.addActionListener(e -> openImage());
//        cropButton.addActionListener(e -> cropImage());
//        saveButton.addActionListener(e -> saveImage());
//    }
//
//    private void openImage() {
//        JFileChooser fileChooser = new JFileChooser();
//        fileChooser.setDialogTitle("选择图片");
//        fileChooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter(
//                "图片文件", "jpg", "jpeg", "png", "gif", "bmp"));
//
//        if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
//            try {
//                originalImage = ImageIO.read(fileChooser.getSelectedFile());
//                scaleImageToFit();
//                selectionRect.setBounds(100, 100, 200, 150);
//                imageLabel.repaint();
//            } catch (IOException ex) {
//                JOptionPane.showMessageDialog(this, "无法加载图片: " + ex.getMessage(),
//                        "错误", JOptionPane.ERROR_MESSAGE);
//            }
//        }
//    }
//
//    private void scaleImageToFit() {
//        if (originalImage == null) return;
//
//        int labelWidth = imageLabel.getWidth();
//        int labelHeight = imageLabel.getHeight();
//
//        if (labelWidth <= 0 || labelHeight <= 0) {
//            displayImage = originalImage;
//            return;
//        }
//
//        double widthRatio = (double) labelWidth / originalImage.getWidth();
//        double heightRatio = (double) labelHeight / originalImage.getHeight();
//        double scale = Math.min(widthRatio, heightRatio);
//
//        int scaledWidth = (int) (originalImage.getWidth() * scale);
//        int scaledHeight = (int) (originalImage.getHeight() * scale);
//
//        displayImage = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_ARGB);
//        Graphics2D g2d = displayImage.createGraphics();
//        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
//                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//        g2d.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
//        g2d.dispose();
//
//        imageLabel.setPreferredSize(new Dimension(scaledWidth, scaledHeight));
//        revalidate();
//    }
//
//    private void cropImage() {
//        if (originalImage == null) {
//            JOptionPane.showMessageDialog(this, "请先打开图片",
//                    "提示", JOptionPane.WARNING_MESSAGE);
//            return;
//        }
//
//        // 计算原始图片上的对应区域
//        double scaleX = (double) originalImage.getWidth() / displayImage.getWidth();
//        double scaleY = (double) originalImage.getHeight() / displayImage.getHeight();
//
//        int x = (int) (selectionRect.x * scaleX);
//        int y = (int) (selectionRect.y * scaleY);
//        int width = (int) (selectionRect.width * scaleX);
//        int height = (int) (selectionRect.height * scaleY);
//
//        // 确保不超出图片范围
//        x = Math.max(0, Math.min(x, originalImage.getWidth() - 1));
//        y = Math.max(0, Math.min(y, originalImage.getHeight() - 1));
//        width = Math.max(1, Math.min(width, originalImage.getWidth() - x));
//        height = Math.max(1, Math.min(height, originalImage.getHeight() - y));
//
//        // 执行裁剪
//        BufferedImage croppedImage = originalImage.getSubimage(x, y, width, height);
//
//        // 显示裁剪结果
//        JDialog resultDialog = new JDialog(this, "裁剪结果", true);
//        resultDialog.setLayout(new BorderLayout());
//
//        JLabel resultLabel = new JLabel(new ImageIcon(croppedImage));
//        resultDialog.add(new JScrollPane(resultLabel), BorderLayout.CENTER);
//
//        JButton saveButton = new JButton("保存");
//        saveButton.addActionListener(e -> {
//            saveImage(croppedImage);
//            resultDialog.dispose();
//        });
//
//        JPanel buttonPanel = new JPanel();
//        buttonPanel.add(saveButton);
//        resultDialog.add(buttonPanel, BorderLayout.SOUTH);
//
//        resultDialog.pack();
//        resultDialog.setLocationRelativeTo(this);
//        resultDialog.setVisible(true);
//    }
//
//    private void saveImage() {
//        if (originalImage == null) return;
//        cropImage(); // 直接调用裁剪方法，在裁剪界面保存
//    }
//
//    private void saveImage(BufferedImage image) {
//        JFileChooser fileChooser = new JFileChooser();
//        fileChooser.setDialogTitle("保存图片");
//        fileChooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter(
//                "PNG图片", "png"));
//        fileChooser.setSelectedFile(new File("cropped.png"));
//
//        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
//            File file = fileChooser.getSelectedFile();
//            if (!file.getName().toLowerCase().endsWith(".png")) {
//                file = new File(file.getParentFile(), file.getName() + ".png");
//            }
//
//            try {
//                ImageIO.write(image, "png", file);
//                JOptionPane.showMessageDialog(this, "图片保存成功: " + file.getName(),
//                        "成功", JOptionPane.INFORMATION_MESSAGE);
//            } catch (IOException ex) {
//                JOptionPane.showMessageDialog(this, "保存失败: " + ex.getMessage(),
//                        "错误", JOptionPane.ERROR_MESSAGE);
//            }
//        }
//    }
//
//    public static void main(String[] args) {
//        SwingUtilities.invokeLater(() -> {
//            ImageCropper app = new ImageCropper();
//            app.setVisible(true);
//        });
//    }
//}